/** @format */

// 导入axios库用于发送HTTP请求
import axios from "axios";
// 导入antd的消息组件用于显示加载提示
import { message } from "antd";

// 全局请求计数器（记录当前进行中的请求数量）
let reqCount = 0;
// 存储加载提示的关闭方法（初始为空）
let hideLoading = null;

// 创建axios实例（基础配置）
const service = axios.create();

// =============== 请求拦截器 ===============
service.interceptors.request.use((config) => {
  // 请求发送前的处理逻辑
  if (reqCount === 0) {
    // 当第一个请求开始时显示加载提示
    // message.loading()返回关闭方法，0表示不自动关闭
    hideLoading = message.loading("加载中...", 0);
  }
  // 递增请求计数器
  reqCount = reqCount + 1;

  return config; // 必须返回配置对象
});

// =============== 响应拦截器 ===============
service.interceptors.response.use(
  // 成功响应处理
  (response) => {
    // 递减请求计数器
    reqCount = reqCount - 1;

    // 当计数器归零时关闭加载提示
    if (reqCount === 0) {
      // 使用可选链操作符安全调用
      if (hideLoading) hideLoading();
    }
    return response; // 返回响应结果
  },
  // 错误响应处理
  (error) => {
    // 递减请求计数器（错误时也需要减少）
    reqCount = reqCount - 1;

    // 同样需要检查是否关闭加载提示
    if (reqCount === 0) {
      if (hideLoading) hideLoading();
    }

    //判断错误状态码
    if (error.response.status === 401) {
      // 401错误处理逻辑（如跳转到登录页面）
      message.error("请重新登录");
    } else if (error.response.status === 500) {
      // 500错误处理逻辑（如显示错误信息）
      message.error("服务器错误");
    } else if (error.response.status === 300) {
      // 300错误处理逻辑（如显示错误信息）
      message.error("请求需要重定向");
    }

    return Promise.reject(error); // 传递错误
  }
);

// 导出配置好的axios实例
export default service;
